// 伪属性
const obj = {
  name: "zs",
  set setName(v) {
    console.log(v);
  },
  get getName() {
    return this.name;
  },
};

console.log(obj.setName);

/**
 * 从下面可以看出来，在类中也可以使用对象中的语法（如：setter/getter）但是一般不建议风格掺在一起写
 */
class Student {
  name = '李四';
  set setName(v) {
    this.name = v;
  }
  constructor({ name }) {
    // this.name = name
  }
  getName() {
    return this.name
  }
}

const stu = new Student({ name: "张三" });

console.log(stu.name)
stu.setName = "张三";
console.log(stu.name); // 张三
console.log(stu.getName())


/**
 * 静态属性,静态方法重新学习
 */
class Teacher {
    static name = '王明明'
    static school = '附中'
    static computedName = this.name // this在这里就是Teacher构造函数
    // static [Teacher.computedName + '1'] = '王二明' // ReferenceError: Cannot access 'Teacher' before initialization
    static [this.name] = '王二明' // this是undefined

    static log() {
        console.log(Teacher)
        console.log(this)
    }
    constructor(name1) {
        this.name1 = name1
        this.copy_name = Teacher.name
    }
    getName(){
        return this.name1
    }
    getCopyName(){
        return this.copy_name
    }
}

const tea = new Teacher('张森森')
console.log(tea.name) // 张森森
console.log(tea.getName()) // 张森森
console.log(tea.school) // undefined，因为这个school是绑定在类上面的，而不是实例上的
console.log(tea.copy_name) // 王明明
console.log(tea.getCopyName()) // 王明明
console.log(Teacher.computedName) // 王明明
Teacher.log()